%!Tex Program = xelatex
\documentclass[a4paper]{article}
%\documentclass[a4paper]{ctexart}
\usepackage{xltxtra}
%\setmainfont[Mapping=tex-text]{AR PL UMing CN:style=Light}
%\setmainfont[Mapping=tex-text]{AR PL UKai CN:style=Book}
%\setmainfont[Mapping=tex-text]{WenQuanYi Zen Hei:style=Regular}
%\setmainfont[Mapping=tex-text]{WenQuanYi Zen Hei Sharp:style=Regular}
%\setmainfont[Mapping=tex-text]{AR PL KaitiM GB:style=Regular} 
%\setmainfont[Mapping=tex-text]{AR PL SungtiL GB:style=Regular} 
\usepackage{geometry}
% 设置中文字体
\setmainfont{AR PL UMing CN}
\geometry{left=20mm,right=20mm,top=20mm,bottom=20mm}
\begin{document}


\title{项目作业：来做个系统架构师吧}
\author{wangjie}
\date{2023-1-5}
\maketitle

\section{设计思路：}
增加一个基础虚类: BinaryTree, 作为最顶级的基类, 用以规范二叉树的基本操作\\
在这里,BinaryTree 被定义为一个纯虚类（含有纯虚函数），它没有具体的实现，只用于定义接口。其他类(比如 BinarySearchTree)\\
可以继承 \\
BinaryTree 并提供具体的实现来满足接口的要求。\\
BinaryTree 定义了以下纯虚函数：\\
isEmpty(): 检查二叉树是否为空。\\
makeEmpty(): 清空二叉树。\\
insert(const Comparable\& x): 向二叉树中插入一个元素。\\
insert(Comparable\&\& x): 使用移动语义向二叉树中插入一个元素。\\
remove(const Comparable\& x): 从二叉树中删除一个元素。\\
其中最主要的是对于前缀，中缀，后缀遍历来划分各个树的种类 \\
preorderTraversal():前缀 \\
inorderTraversal():中缀 \\
postorderTraversal():后缀 \\
通过将 BinarySearchTree 继承自 BinaryTree,BinarySearchTree 类就具备了这些基本的二叉树操作，并可以根据\\
需要进行扩展或重写。\\
\section{BinarySearchTree Class} 
BinarySearchTree class扩展了BinaryTree类,并为二叉搜索树操作提供了特定的方法和覆盖。\\
\section{AvlTree Class} 
AvlTree class扩展了BinaryTree类并为AvlTree操作提供了特定的方法和覆盖。\\
\section{RedBlackTree Class} 
RedBlackTree类扩展了BinaryTree类,并为红黑树操作提供了特定的方法和覆盖,包括维护树的红黑属性的方法。\\
\section{SplayTree Class} 
SplayTree类扩展了BinaryTree类,并为Splay树操作提供了特定的方法和覆盖,包括用于显示节点的方法。\\
\end{document}